package com.zy.rest.service.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.zy.common.util.JsonUtils;
import com.zy.mapper.TbContentMapper;
import com.zy.pojo.TbContent;
import com.zy.pojo.TbContentExample;
import com.zy.pojo.TbContentExample.Criteria;
import com.zy.rest.dao.JedisClient;
import com.zy.rest.service.ContentService;

@Service
public class ContentServiceImpl implements ContentService {

	/*
	 * 设定同意key值
	 */
	@Value("${INDEX_CONTENT_REDIS_KEY}")
	private String INDEX_CONTENT_REDIS_KEY;

	@Autowired
	private TbContentMapper contentMapper;

	@Autowired
	private JedisClient JedisClient;

	/**
	 * 根据内容分类id查询内容列表
	 */
	@Override
	public List<TbContent> getContentList(long categoryId) {
		/*
		 *  先从缓存中取内容
		 */
		try {
			/*
			 * 从缓存中获取通过  键 ----->String类型key（categoryId+""）值获取
			 */
			String json=JedisClient.hget(INDEX_CONTENT_REDIS_KEY, categoryId+"");
			if(!StringUtils.isBlank(json)) {
				// 将字符串转换成list
				List<TbContent> resultList = JsonUtils.jsonToList(json, TbContent.class);
//				System.out.println("我在缓存中读取的幺");
				return resultList;
			}
		}catch (Exception e) {
			e.printStackTrace();
		}
		/*
		 * 从数据库中读取数据
		 */
		//创建查询你条件所需的对象
		TbContentExample example = new TbContentExample();
		Criteria criteria = example.createCriteria();
		criteria.andCategoryIdEqualTo(categoryId);
		// 根据内容分类id查询内容列表
		List<TbContent> list = contentMapper.selectByExample(example);
		/*
		 * 向缓存中添加数据
		 */
		try {
			// 将list转换成字符串
			String json = JsonUtils.objectToJson(list);
			/*
			 * hash类型  键   ----> key --value
			 */
			JedisClient.hset(INDEX_CONTENT_REDIS_KEY, categoryId+"", json);
			//此处使用hash类型，无法设置过期时间
//			System.out.println("我在缓存中添加了数据幺");
		}catch(Exception e) {
			e.printStackTrace();
			System.out.println("向缓存中添加失败");
		}
		return list;
	}
}
